/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ventasInternet.beans;

import com.ventasInternet.Delegate.DelegateVentasInternet;
import com.ventasInternet.UpDowImagenes.FileUpDoController;
import com.ventasInternet.entity.Categoria;
import com.ventasInternet.entity.Imagen;
import com.ventasInternet.entity.Producto;
import com.ventasInternet.utils.ManejadorMensajes;
import java.io.IOException;
import java.io.Serializable;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author DESARO03
 */
@ManagedBean(name="gestionProductos")
@ViewScoped
public class GestionProductos implements Serializable {
    private final static Logger logger = Logger.getLogger(GestionProductos.class.getName());
    
    private List<Categoria> listCategorias;
    private List<Producto> listProductos;
    private List<Imagen> listImagenes;
    
    private Producto producto;
    private Categoria categoria;
    
    private String paramMomProducto;
    private Integer tipoBusqueda;
    private int tipoNME;
    
    private Boolean flagParamNombre;
    private Boolean flagParamCategoria;
    
    private FileUpDoController fileUpDoController;
    /** Creates a new instance of GestionProductos */
    public GestionProductos() {
        this.tipoBusqueda = 1;
        this.flagParamNombre = true;
        this.flagParamCategoria = true; 
        this.listCategorias = this.obtenerCategorias();
        this.fileUpDoController = new FileUpDoController();
        
        this.producto= new Producto();
        this.listImagenes = new ArrayList<Imagen>();
        
        this.listProductos = this.obtenerProductos();
    }

    public List<Categoria> getListCategorias() {
        return listCategorias;
    }

    public void setListCategorias(List<Categoria> listCategorias) {
        this.listCategorias = listCategorias;
    }

    public List<Imagen> getListImagenes() {
        return listImagenes;
    }

    public void setListImagenes(List<Imagen> listImagenes) {
        this.listImagenes = listImagenes;
    }

    public List<Producto> getListProductos() {
        return listProductos;
    }

    public void setListProductos(List<Producto> listProductos) {
        this.listProductos = listProductos;
    }

    public String getParamMomProducto() {
        return paramMomProducto;
    }

    public void setParamMomProducto(String paramMomProducto) {
        this.paramMomProducto = paramMomProducto;
    }

    public Categoria getCategoria() {
        if(this.categoria == null)
            this.categoria = new Categoria();
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }

    public Integer getTipoBusqueda() {
        return tipoBusqueda;
    }

    public void setTipoBusqueda(Integer tipoBusqueda) {
        this.tipoBusqueda = tipoBusqueda;
    }
    
   

    public Producto getProducto() {
        return producto;
    }

    public void setProducto(Producto producto) {
        this.producto = producto;
    }

    public Boolean getFlagParamCategoria() {
        return flagParamCategoria;
    }

    public void setFlagParamCategoria(Boolean flagParamCategoria) {
        this.flagParamCategoria = flagParamCategoria;
    }

    public Boolean getFlagParamNombre() {
        return flagParamNombre;
    }

    public void setFlagParamNombre(Boolean flagParamNombre) {
        this.flagParamNombre = flagParamNombre;
    }
    
    /**
     * 
     */
    private List<Categoria> obtenerCategorias(){
        try{
            return DelegateVentasInternet.getInstance().findAllCategoriaDL();
        }catch(Exception ex){
            logger.log(Level.SEVERE, ex.toString());
            return null;
        }
    }
    private List<Producto> obtenerProductos(){
        List<Producto> listProductosTmp = null;
        switch (this.tipoBusqueda) {
            case 1:
                   listProductosTmp = DelegateVentasInternet.getInstance().findAllProductosDL();
                break;
            case 2:
                
                break;
            case 3:
                
                break;
            default:
                throw new AssertionError();
        }
        return listProductosTmp;
    }
    
    
    public void activaCasillas(){
        switch(this.tipoBusqueda){
            case 1:
                    this.setFlagParamCategoria(true);
                    this.setFlagParamNombre(true);
                    this.setParamMomProducto(null);
                break;
            case 2: //Descripcion
                    this.setFlagParamCategoria(true);
                    this.setFlagParamNombre(false);
                    this.setParamMomProducto(null);
                    
                    //this.estadoBean.setDigideValor("0");
                break;
            case 3: //Tipo Indicador
                   this.setFlagParamCategoria(false);
                    this.setFlagParamNombre(true);
                    this.setParamMomProducto(null);
                    //this.setParamBus(" ")
                break;
           default:
        }
    }
     public void handleFileUpload(FileUploadEvent event) {
         boolean flgUp = false;
         FacesMessage msg=null;
         Imagen imagepro=null;
         String nombreImagen=null;
        try {
            
            nombreImagen = convertirfecha()+event.getFile().getFileName();
            String destination = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/ImagesProductos");
            flgUp=fileUpDoController.upFile(nombreImagen, event.getFile().getInputstream(),destination);
            if(flgUp){
               imagepro = new Imagen();
               imagepro.setNombre(nombreImagen);
               imagepro.setRuta(destination);
               this.listImagenes.add(imagepro);
               msg = new FacesMessage("Exito ", event.getFile().getFileName() + " Cargado ");
             }else{
               msg = new FacesMessage("Error ", event.getFile().getFileName() + " No Cargado ");
            }
            FacesContext.getCurrentInstance().addMessage(null, msg);
        } catch (IOException ex) {
            Logger.getLogger(GestionProductos.class.getName()).log(Level.SEVERE, null, ex);
        }
     }
     public void setupNuevo(){
         this.producto = new Producto();
         this.listImagenes = new ArrayList<Imagen>();
         this.tipoNME = 1;
     }
     public void setupModificar(Producto producto ){
         this.producto = producto;//DelegateVentasInternet.getInstance().findProductoDL(producto.getIdProd());
         this.listImagenes = producto.getImagenList();
         this.tipoNME = 2;
     }
     public void setupEliminar(Producto producto){
         this.producto = producto;
         //this.listImagenes = null;
         this.tipoNME = 3;
     }
     
     public void alterarProducto(){
         RequestContext context = RequestContext.getCurrentInstance();
         int tipBusTmp = this.tipoBusqueda;
         this.tipoBusqueda = 1;
         switch (tipoNME) {
             case 1:
                 this.guardarProducto();
                 context.execute("wgv_newEditProducto.hide()");
                 ManejadorMensajes.showMessageInfo("Producto creada satisfactoriamente.");
                 this.setListProductos(this.obtenerProductos());
                 break;
             case 2:
                 this.modificarProducto();
                 context.execute("wgv_newEditProducto.hide()");
                 ManejadorMensajes.showMessageInfo("Producto modificado satisfactoriamente.");
                 this.setListProductos(this.obtenerProductos());
                 break;
             case 3:
                 
                 break;
             default:
                 throw new AssertionError();
         }
         this.tipoBusqueda=tipBusTmp ;
     }
     private void guardarProducto(){
         
         DelegateVentasInternet.getInstance().registrarProductoDL(this.producto, this.listImagenes);
     }
     private void modificarProducto(){
         DelegateVentasInternet.getInstance().modificarProductoDL(this.producto,this.listImagenes);
     }
     private void elimiarProducto(){}
     
     
     public String convertirfecha(){
        String sfecha= null;
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        int miliseg= calendar.get(Calendar.MILLISECOND);
        int segundo = calendar.get(Calendar.SECOND);
        int minuto = calendar.get(Calendar.MINUTE);
        int hora = calendar.get(Calendar.HOUR);
        int dia = calendar.get(Calendar.DAY_OF_MONTH);   //dia del mes
        int mes = calendar.get(Calendar.MONTH);  //mes, de 0 a 11
        int anio = calendar.get(Calendar.YEAR);  //año
        sfecha = dia+""+mes+""+anio+"_"+hora+""+minuto+""+segundo+""+miliseg;
         System.out.println("fecha"+sfecha);
        return sfecha.trim();
    }
    public void limpiar(){
        this.producto = null;
        this.listImagenes = null;
    }
}  
